package com.chinaunicom.auth.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;
import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter;
import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStore;

/**
 * @author liry
 * @version 1.0
 * @date Created on 2021/3/5 15:53
 * Description: 配置token 存放在redis， 配置第三方应用
 */

@Configuration
public class AuthorizationConfig extends AuthorizationServerConfigurerAdapter {

//    /**
//     * redis连接工厂
//     */
//    @Autowired
//    private RedisConnectionFactory redisConnectionFactory;
//
//    @Autowired
//    private PasswordEncoder passwordEncoder;
//
//    @Autowired
//    private AuthenticationManager authenticationManager;
//
//
//    /**
//     * 让oauth的token 和 redis存储进行关联
//     */
//    @Bean
//    public TokenStore tokenStore() {
//        return new RedisTokenStore(redisConnectionFactory);
//    }
//
//
//    /**
//     * 配置第三方应用
//     * 四种授权模式:
//     * 1. code模式: authorization_code
//     * 2. 静默授权:
//     * 3. 密码模式: password
//     * 4. 客户端授权
//     *
//     * @param clients
//     * @throws Exception
//     */
//    @Override
//    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
//        super.configure(clients);
//        clients.inMemory()
//                .withClient("web")  // 第三方应用客户端名称
//                .secret(passwordEncoder.encode("web-secret")) // 第三方应用密码
//                .scopes("read") // 第三方应用作用域
//                .authorizedGrantTypes("authorization_code") // code码授权
//                .accessTokenValiditySeconds(7200) // token有效时间
//                .redirectUris("https://www.baidu.com") // 授权后跳转的uri地址
//                .and()
//                // 配置第二个客户端信息:
//                .withClient("qq")
//                .secret(passwordEncoder.encode("qq-secret"))
//                .scopes("write")
//                .authorizedGrantTypes("password")  // 密码授权
//                .accessTokenValiditySeconds(7200)
//                .redirectUris("https://www.baidu.com");
//
//    }
//
//
//    /**
//     * 需要暴露授权服务给token存储
//     * 暴露授权服务器给认证管理器
//     * @param endpoints
//     * @throws Exception
//     */
//    @Override
//    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
//        super.configure(endpoints);
//        endpoints.tokenStore(tokenStore())
//                .authenticationManager(authenticationManager);
//    }
}
